﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ShivamEMR.Model.DataInterfaces.UsersDataInterf;
using ShivamEMR.Model.DataInterfaces.PersonDataInterf;
using ShivamEMR.Model.DataInterfaces.CompanyDataInterf;
using ShivamEMR.Model.DataInterfaces.UIDataInterf;
using ShivamEMR.Model.DataInterfaces.ContactsDataInterf;
using ShivamEMR.Model.DataInterfaces.DoctorDataInterf;
using ShivamEMR.Model.DataInterfaces.LocationDataInterf;
using ShivamEMR.Model.DataInterfaces.MedicalDataInterf;
using ShivamEMR.Model.DataInterfaces.PharmacyDataInterf;
using ShivamEMR.Model.DataInterfaces.AssetsDataInterf;
using ShivamEMR.Model.DataInterfaces.CommonDataInterf;
using ShivamEMR.Model.DataInterfaces.CRMDataInterf;
using ShivamEMR.Model.DataInterfaces.InventoryDataInterf;
using ShivamEMR.Model.DataInterfaces.PatientDataInterf;
using ShivamEMR.Model.DataInterfaces.ServiceDataInterf;
using ShivamEMR.Model.DataInterfaces.AccountsDataInterf;

namespace ShivamEMR.Model.DataInterfaces
{
    public interface IRepositoryFactory
    {
        #region AccountsModuleRepository
        IAccountBalanceRepository GetAccountBalanceRepository();
        IAccountGroupRepository GetAccountGroupRepository();
        IAccountingRuleRepository GetAccountingRuleRepository();
        IAccountNatureRepository GetAccountNatureRepository();
        IAccountRepository GetAccountRepository();
        IAccountsEntryRepository GetAccountsEntryRepository();
        IAccountsPictureRepository GetAccountsPictureRepository();
        IAccountsPostingTypeRepository GetAccountsPostingTypeRepository();
        IAccountStatusRepository GetAccountStatusRepository();
        IAccountsTransactionRepository GetAccountsTransactionRepository();
        IAccountsTransactionTypeRepository GetAccountsTransactionTypeRepository();
        IAccountsVoucherRepository GetAccountsVoucherRepository();
        IAccountsVoucherTypeRepository GetAccountsVoucherTypeRepository();
        IAccountTypeRepository GetAccountTypeRepository();
        IDepreciationRepository GetDepreciationRepository();
        IFinancialYearRepository GetFinancialYearRepository();
        IMoneyRepository GetMoneyRepository();
        IPaymentRepository GetPaymentRepository();
        IPaymentStatusRepository GetPaymentStatusRepository();
        IPaymentTypeRepository GetPaymentTypeRepository();
        IPaymentVoucherRepository GetPaymentVoucherRepository();
        IReceiptVoucherRepository GetReceiptVoucherRepository();
        ISalesVoucherRepository GetSalesVoucherRepository();
        ITaxInformationRepository GetTaxInformationRepository();
        ITaxRepository GetTaxRepository();
        ITaxTypeRepository GetTaxTypeRepository();
        
        #endregion

        #region AssetModuleRepositories
        IAssetGroupRepository GetAssetGroupRepository();
        IAssetPictureRepository GetAssetPictureRepository();
        IAssetRepository GetAssetRepository();
        IAssetStatusRepository GetAssetStatusRepository(); 
        #endregion      

        #region CommonModuleRepositories
        IAlertRepository GetAlertRepository();
        IDataDictionaryItemStatusRepository GetDataDictionaryItemStatusRepository();
        IDataDictionaryRepository GetDataDictionaryRepository();
        IDocumentRepository GetDocumentRepository();
        IUnitRepository GetUnitRepository(); 
        #endregion

        #region CompanyModuleIRepositories
        IBranchRepository GetBranchRepository();
        IBranchGroupRepository GetBranchGroupRepository();
        ICompanyRepository GetCompanyRepository();
        ICompanyGroupRepository GetCompanyGroupRepository();
        ICompanyPictureRepository GetCompanyPictureRepository();
        IDepartmentRepository GetDepartmentRepository();
        IDesignationRepository GetDesignationRepository();
        IEmployeeRepository GetEmployeeRepository();
        IEmployeeGroupRepository GetEmployeeGroupRepository();
        IEmployeeScheduleRepository GetEmployeeScheduleRepository();
        IEmployeeStatusRepository GetEmployeeStatusRepository();
        IScheduleRepository GetScheduleRepository();
        IScheduleSatatusRepository GetScheduleStatusRepository();
        #endregion

        #region ContactModuleIRepositories
        IAddressRepository GetAddressRepository();
        IAddressTypeRepository GetAddressTypeRepository();
        ICityRepository GetCityRepository();
        IContactRepository GetContactRepository();
        IContactPictureRepository GetContactPictureRepository();
        IContactTypeRepository GetContactTypeRepository();
        ICountryRepository GetCountryRepository();
        ICultureAndRegionRepository GetCultureAndRegionRepository();
        INationalityRepository GetNationalityRepository();
        ITerritoryRepository GetTerritoryRepository(); 
        #endregion

      #region CRMModuleRepositories
		  IAnswerDetailRepository GetAnswerDetailRepository();
        IAppointmentGroupRepository GetAppointmentGroupRepository();
        IAppointmentRepository GetAppointmentRepository();
        IAppointmentStatusRepository GetAppointmentStatusRepository();
        IAssignmentGroupRepository GetAssignmentGroupRepository();
        IAssignmentRepository GetAssignmentRepository();
        IAssignmentStatusRepository GetAssignmentStatusRepository();
        IEventRepository GetEventRepository();
        IInteractionGroupRepository GetInteractionGroupRepository();
        IInteractionRepository GetInteractionRepository();
        IMessageGroupRepository GetMessageGroupRepository();
        IMessageRepository GetMessageRepository();
        IMessageSatusRepository GetMessageSatusRepository();
        IMessageTypeRepository GetMessageTypeRepository();
        IQuestionAnswerRepository GetQuestionAnswerRepository();
        IQuestionGroupRepository GetQuestionGroupRepository();
        IQuestionOptionRepository GetQuestionOptionRepository();
        IQuestionRepository GetQuestionRepository();
        IQuestionStatusRepository GetQuestionStatusRepository();
        IQuestionTypeRepository GetQuestionTypeRepository();
        IVenueRepository GetVenueRepository(); 
	#endregion        

        #region DoctorModuleRepositories
        IDoctorRepository GetDoctorRepository();
        ISpecialtiesRepository GetSpecialtiesRepository(); 
        #endregion

        #region InventoryModuleRepositories
        IBatchRepository GetBatchRepository();
        IBatchSatusRepository GetBatchSatusRepository();
        IBatchTypeRepository GetBatchTypeRepository();
        IInventoryEntryRepository GetInventoryEntryRepository();
        IInventoryPostingTypeRepository GetInventoryPostingTypeRepository();
        IInventoryTransactionRepository GetInventoryTransactionRepository();
        IInventoryTransactionTypeRepository GetInventoryTransactionTypeRepository();
        IInventoryVoucherRepository GetInventoryVoucherRepository();
        IInventoryVoucherTypeRepository GetInventoryVoucherTypeRepository();
        IInvoiceGroupRepository GetInvoiceGroupRepository();
        IInvoiceItemRepository GetInvoiceItemRepository();
        IInvoiceRepository GetInvoiceRepository();
        IInvoiceStatusRepository GetInvoiceStatusRepository();
        IInvoiceTypeRepository GetInvoiceTypeRepository();
        IItemGroupRepository GetItemGroupRepository();
        IItemPictureRepository GetItemPictureRepository();
        IItemRepository GetItemRepository();
        IItemSaleRepository GetItemSaleRepository();
        IItemStatusRepository GetItemStatusRepository();
        IItemTypeRepository GetItemTypeRepository();
        IManufacturerGroupRepository GetManufacturerGroupRepository();
        IManufacturerRepository GetManufacturerRepository();
        IOrderGroupRepository GetOrderGroupRepository();
        IOrderItemRepository GetOrderItemRepository();
        IOrderRepository GetOrderRepository();
        IOrderStatusRepository GetOrderStatusRepository();
        IOrderTypeRepository GetOrderTypeRepository();
        IPackingRepository GetPackingRepository();
        IPackingTypeRepository GetPackingTypeRepository();
        ISupplierGroupRepository GetSupplierGroupRepository();
        ISupplierRepository GetSupplierRepository(); 
        #endregion

        #region LocationModuleRepositories
        ILocationGroupRepository GetLocationGroupRepository();
        ILocationPictureRepository GetLocationPictureRepositry();
        ILocationRepository GetLocationRepository(); 
        #endregion

        #region MedicalModuleRepositories
        IDiseaseCategoryRepository GetDiseaseCategoryRepository();
        IDiseaseGroupRepository GetDiseaseGroupRepository();
        IDiseaseRepository GetDiseaseRepository();
        IRadiologyAttachmentRepository GetRadiologyAttachmentRepository();
        IRadiologyGroupRepository GetRadiologyGroupRepository();
        IRadiologyItemRepository GetRadiologyItemRepository();
        IRadiologyRepository GetRadiologyRepository();
        ITestRepository GetTestRepository();
        ITestGroupRepository GetTestGroupRepository();
        ITestItemRepository GetTestItemRepository();
        ITreatmentTypeRepository GetTreatmentTypeRepository(); 
        #endregion

        #region PatientModuleRepositories
        IAdmissionRepository GetAdmissionRepository();
        IAdmissionStatusRepository GetAdmissionStatusRepository();
        IAdmissionTypeRepository GetAdmissionTypeRepository();
        IConsultationRepository GetConsultationRepository();
        IDiagnosisRepository GetDiagnosisRepository();
        IDiagnosisStatusRepository GetDiagnosisStatusRepository();
        IDiagnosticItemRepository GetDiagnosticItemRepository();
        IInsuranceCategoryRepository GetInsuranceCategoryRepository();
        IInsurancePlanRepository GetInsurancePlanRepository();
        IInsuranceRepository GetInsuranceRepository();
        IInsuranceStatusRepository GetInsuranceStatusRepository();       
        IMedicationRepository GetMedicationRepository();
        IMedicationStatusRepository GetMedicationStatusRepository();
        IPatientAllergyGroupRepository GetPatientAllergyGroupRepository();
        IPatientAllergyRepository GetPatientAllergyRepository();
        IPatientGroupRepository GetPatientGroupRepository();
        IPatientInformationRepository GetPatientInformationRepository();
        IPatientRadiologyAttachmentRepository GetPatientRadiologyAttachmentRepository();
        IPatientRadiologyPictureRepository GetPatientRadiologyPictureRepository();
        IPatientRadiologyRepository GetPatientRadiologyRepository();
        IPatientRepository GetPatientRepository();
        IPatientRepresentativeRepository GetPatientRepresentativeRepository();
        IPatientServiceRepository GetPatientServiceRepository();
        IPatientTestPictureRepository GetPatientTestPictureRepository();
        IPatientTestRepository GetPatientTestRepository();
        IPatientTreatmentRepository GetPatientTreatmentRepository();
        ITreatmentStatusRepository GetTreatmentStatusRepository(); 
        #endregion        

        #region PersonModuleRepositories
        ISexRepository GetSexRepository();
        IMaritalStatusRepository GetMaritalStatusRepository();
        IPersonRepository GetPersonRepository();
        IPersonStatusRepository GetPersonStatusRepository();
        IPersonPictureRepository GetPersonPictureRepository();
        IPersonAccountRepository GetPersonAccountRepository();
        IPersonRoleRepository GetPersonRoleRepository();
        IPersonStageRepository GetPersonStageRepository();
        IPersonInformationRepository GetPersonInformationRepository();
        #endregion

       #region PharmacyModuleRepositories
	    IDosageRepository GetDosageRepository();
        IDrugBrandRepository GetDrugBrandRepository();
        IDrugCategoryRepository GetDrugCategoryRepository();
        IDrugClassRepository GetDrugClassRepository();
        IDrugContraIndicationRepository GetDrugContraIndicationRepository();
        IDrugGenericRepository GetDrugGenericRepository();
        IDrugGroupRepository GetDrugGroupRepository();
        IDrugInteractionRepository GetDrugInteractionRepository();
        IDrugItemRepository GetDrugItemRepository();
        IDrugPackingRepository GetDrugPackingRepository();
        IDrugPictureRepository GetDrugPictureRepository();
        IDrugRepository GetDrugRepository();
	#endregion

        #region ServiceModuleRepositories
        IEMRServiceGroupRepository GetEMRServiceGroupRepository();
        IEMRServicePackageRepository GetEMRServicePackageRepository();
        IEMRServicePackageStatusRepository GetEMRServicePackageStatusRepository();
        IEMRServicePackageTypeRepository GetEMRServicePackageTypeRepository();
        IEMRServiceRepository GetEMRServiceRepository();
        IEMRServiceSchemeRepository GetEMRServiceSchemeRepository();
        IEMRServiceSchemeTypeRepository GetEMRServiceSchemeTypeRepository();
        IEMRServiceTypeRepository GetEMRServiceTypeRepository();
        IServiceItemRepository GetServiceItemRepository();
        IServiceItemStatusRepository GetServiceItemStatusRepository();
        IServicePictureRepository GetServicePictureRepository();
        IServicePriceRepository GetServicePriceRepository(); 
        #endregion

        #region UIModulesIRepositories
        //IMenuRepository GetMenuRepository();
        //IMenuGroupRepository GetMenuGroupRepository();
        IUIStyleRepository GetUIStyleRepository(); 
        #endregion

        #region UserModuleIRepositories
        IAccessPermissionRepository GetAccessPermissionRepository();
        IUserRepository GetUserRepository();
        IUserRoleRepository GetUserRoleRepository();
        IUserRightGroupRepository GetUserRightGroupRepository();
        IUserRightRepository GetUserRightRepository();
        IUserRightTypeRepository GetUserRightTypeRepository();
        IUserTaskRepository GetUserTaskRepository();
        #endregion        
    }
}
